Triggers হল MySQL-এর একটি বিশেষ বৈশিষ্ট্য যা আপনাকে একটি টেবিলে ডেটা ইনসার্ট, আপডেট অথবা ডিলিট হওয়ার সময় স্বয়ংক্রিয়ভাবে কিছু কার্যক্রম (অথবা অ্যাকশন) সম্পাদন করতে সাহায্য করে। যখনই একটি নির্দিষ্ট ইভেন্ট ঘটে, তখন একটি ট্রিগার স্বয়ংক্রিয়ভাবে এক্সিকিউট হয়।
MySQL এ ট্রিগার সাধারণত BEFORE অথবা AFTER ইভেন্টে তৈরি করা হয়। ট্রিগার টেবিলের ডেটার অখণ্ডতা নিশ্চিত করতে, লগিং, অথবা ডেটা অডিটিং করতে ব্যবহৃত হয়।
1. Trigger এর গঠন
MySQL-এ ট্রিগার তৈরি করতে CREATE TRIGGER কমান্ড ব্যবহার করা হয়। এর মধ্যে ট্রিগারের নাম, কার্যক্রমের ধরন (যেমন, BEFORE বা AFTER), টেবিল এবং ইভেন্টের ধরণ (যেমন, INSERT, UPDATE, অথবা DELETE) নির্ধারণ করা হয়।
সাধারণ Syntax:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
trigger_body;
trigger_name: ট্রিগারের নামtrigger_time:BEFOREবাAFTER- ট্রিগারটি কি ইভেন্টের আগে অথবা পরে চলবেtrigger_event:INSERT,UPDATE, অথবাDELETE- ট্রিগারটি কোন ইভেন্টের জন্যtable_name: যে টেবিলের ওপর ট্রিগারটি তৈরি হবেFOR EACH ROW: প্রতি রো (রেকর্ড) এর জন্য ট্রিগারটি কার্যকর হবেtrigger_body: ট্রিগারের মধ্যে কার্যকর হওয়া SQL কমান্ড
2. Trigger এর ধরন
BEFORE Trigger
BEFORE Trigger টেবিলে ডেটা ইনসার্ট, আপডেট বা ডিলিট হওয়ার আগেই কার্যকর হয়। এটি ডেটা পরিবর্তনের আগে কোনো যাচাই বা অন্যান্য কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়।
CREATE TRIGGER before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.salary = 1000;
এটি employees টেবিলে একটি নতুন রেকর্ড ইনসার্ট হওয়ার আগে salary কলামকে ১০০০ দিয়ে সেট করবে।
AFTER Trigger
AFTER Trigger টেবিলে ডেটা ইনসার্ট, আপডেট বা ডিলিট হওয়ার পর কার্যকর হয়। এটি ডেটা পরিবর্তনের পরে লগিং বা অ্যাকশন নিতে ব্যবহৃত হয়।
CREATE TRIGGER after_insert_employee
AFTER INSERT ON employees
FOR EACH ROW
INSERT INTO audit_log (action, employee_id, action_time)
VALUES ('INSERT', NEW.employee_id, NOW());
এটি employees টেবিলে নতুন রেকর্ড ইনসার্ট হওয়ার পর audit_log টেবিলের মধ্যে একটি রেকর্ড যুক্ত করবে।
3. Trigger এর ব্যবহার
Data Validation
প্রায়ই ডেটাবেসে BEFORE ট্রিগার ব্যবহার করা হয় ডেটা ইনসার্ট বা আপডেট হওয়ার আগে তা যাচাই করার জন্য। উদাহরণস্বরূপ, কোনও কর্মচারীর বেতন যদি একটি নির্দিষ্ট সীমার নিচে থাকে, তবে তাকে ডেটাবেসে ইনসার্ট হতে দেওয়া না হয়।
CREATE TRIGGER check_salary
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < 3000 THEN
SET NEW.salary = 3000;
END IF;
END;
এটি নিশ্চিত করবে যে কোনও কর্মচারী ৩০০০ টাকার নিচে বেতন পাবেন না।
Logging Changes
AFTER ট্রিগার লগিং এর জন্য ব্যবহার করা যেতে পারে। যখন কোনো ডেটা পরিবর্তিত হয়, তখন আপনি তা অডিট লগে সংরক্ষণ করতে পারেন।
CREATE TRIGGER log_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
INSERT INTO employee_logs (employee_id, old_salary, new_salary, change_date)
VALUES (OLD.employee_id, OLD.salary, NEW.salary, NOW());
এটি employees টেবিলে salary আপডেট হওয়ার পরে employee_logs টেবিলের মধ্যে পুরানো এবং নতুন বেতন সংরক্ষণ করবে।
Automatically Updating Related Data
আপনি যখন এক টেবিলে ডেটা আপডেট করেন, তখন অন্যান্য সম্পর্কিত টেবিলগুলোও আপডেট করার জন্য ট্রিগার ব্যবহার করতে পারেন।
CREATE TRIGGER update_department_budget
AFTER UPDATE ON employees
FOR EACH ROW
UPDATE departments
SET budget = budget + 500
WHERE department_id = NEW.department_id;
এটি যখন employees টেবিলের salary আপডেট হবে, তখন সংশ্লিষ্ট departments টেবিলের budget বাড়িয়ে দেবে।
4. Trigger Deletion
ট্রিগারটি মুছে ফেলতে DROP TRIGGER কমান্ড ব্যবহার করা হয়।
DROP TRIGGER trigger_name;
এটি একটি নির্দিষ্ট ট্রিগার মুছে ফেলবে।
5. Trigger এর সীমাবদ্ধতা
- একটি টেবিলের জন্য একাধিক ট্রিগার তৈরি করা যায়, তবে একই ইভেন্টের জন্য একাধিক ট্রিগার থাকলে কার্যক্রমের সময়ক্রমের ব্যাপারে কিছু সীমাবদ্ধতা থাকতে পারে।
- ট্রিগারগুলি খুবই শক্তিশালী হলেও প্রত্যেকটি কার্যক্রম ব্যবহারের সময় পুনরাবৃত্তি এবং পারফরম্যান্স সমস্যায় পড়তে পারে, তাই একে যথাযথভাবে ব্যবহার করা উচিত।
- MySQL এ ট্রিগার দ্বারা শুধুমাত্র ROW-স্তরের ট্রিগার তৈরি করা যায়, STATEMENT-স্তরের ট্রিগার তৈরি করা সম্ভব নয়।
6. Trigger এর ব্যবহারকারীর অভিজ্ঞতা
Triggers ডেটাবেসে প্রক্রিয়াকরণ স্বয়ংক্রিয় করতে সহায়তা করে, তবে ডেটাবেসের কার্যকারিতায় প্রভাব ফেলতে পারে যদি ট্রিগারগুলি অতিরিক্ত এবং জটিল হয়ে যায়। এই কারণে:
- ডিবাগিং এবং লগিং এর মাধ্যমে ট্রিগারের কার্যকারিতা পরীক্ষা করা উচিত।
- ডেটাবেসের পারফরম্যান্স এর উপরে এর প্রভাব বিবেচনা করতে হবে এবং যেখানে প্রয়োজন সেখানে ইনডেক্স বা ক্যাশিং ব্যবহার করতে হবে।
সারাংশ
Triggers MySQL এ একটি শক্তিশালী ফিচার যা আপনাকে টেবিলের ডেটার ওপর স্বয়ংক্রিয়ভাবে কার্যক্রম পরিচালনা করতে সহায়তা করে। এটি ডেটাবেসে ডেটার অখণ্ডতা, লগিং, ডেটা অডিটিং, এবং স্বয়ংক্রিয় আপডেট নিশ্চিত করতে ব্যবহৃত হয়। তবে এর ব্যবহার সাবধানে করা উচিত, কারণ ভুলভাবে ব্যবহৃত হলে এটি পারফরম্যান্সে প্রভাব ফেলতে পারে।
Read more